#if !defined(ximera_plugins_dinput8_keyboard_hpp)
#define ximera_plugins_dinput8_keyboard_hpp

#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>

#include <ximera/input/ikeyboard.hpp>
#include <ximera/input/dinput8/devicetemplate.hpp>

// -----------------------------------------------------------

namespace ximera { namespace input { namespace dinput8
{
    class XIMERA_PLUGIN_API Keyboard: public DeviceTemplate<input::IKeyboard>
    {
    public:
        Keyboard(HWND hWnd, SharedPtr<threading::MessageQueue> const& msgqueue, SharedObject<IDirectInput8> const& dinput);

        virtual ~Keyboard();
    
        virtual Byte axisCount();

        virtual Real axis(Byte axisIndex);

        virtual Int16 axisInt(Byte axisIndex);

        virtual Real axisRel(Byte axisIndex);

        virtual Int16 axisRelInt(Byte axisIndex);

        virtual UInt16 rumble(Byte rumbleIndex) const;

        virtual void rumble(Byte rumbleIndex, UInt16 value);

        virtual void update();

    private:
    };
}}}

// -----------------------------------------------------------

#endif
